package com.ruoyi.verify.aspect;
//package com.ruoyi.jacfile.aspect;
//
//import com.alibaba.fastjson.JSONObject;
//import com.ruoyi.common.redis.util.RedisUtils;
//import com.ruoyi.common.utils.ServletUtils;
//import com.ruoyi.common.utils.StringUtils;
//import com.ruoyi.jacfile.annotation.HasFilePers;
//import com.ruoyi.jacfile.mapper.SysMenuMapper;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.aspectj.lang.reflect.MethodSignature;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.lang.reflect.Method;
//import java.util.Arrays;
//import java.util.HashSet;
//import java.util.List;
//import java.util.Set;
//
//@Component
//@Aspect
//public class hasFilePersAspect
//{
//    private final static Logger logger = LoggerFactory.getLogger(hasFilePersAspect.class);
//
//    @Autowired
//    private RedisUtils          redis;
//
//    @Autowired
//    private SysMenuMapper menuMapper;
//
//    /**
//     * 定义切入点，使用了 @RedisCache 的方法
//     */
//    @Pointcut("@annotation(com.ruoyi.jacfile.annotation.HasFilePers)")
//    public void hasFilePersPoint()
//    {
//    }
//
//    /**
//     * 环绕通知，方法拦截器
//     */
//    @Around("hasFilePersPoint()")
//    public Object WriteReadFromRedis(ProceedingJoinPoint point)
//    {
//        try
//        {
//            Method method = ((MethodSignature) point.getSignature()).getMethod();
//            // 获取RedisCache注解
//            HasFilePers pers = method.getAnnotation(HasFilePers.class);
//            Class<?> returnType = ((MethodSignature) point.getSignature()).getReturnType();
////            String s = JSONObject.toJSONString(perms);
////            return s;
//            String token = "access_token_"+ ServletUtils.getRequest().getHeader("token");
//            if(token=="access_token_"){
//                logger.debug("请携带token");
//                return "fail!请携带token";
//            }
//            Object per_list = redis.get(token, returnType);
//            System.out.println(per_list);
//            if (per_list!=null && pers.need()==true)
//            {
//                String per_str = JSONObject.toJSONString(per_list);
//                JSONObject per_json = JSONObject.parseObject(per_str);
//                Object userId = per_json.get("userId");
////                String userId_s = (String)userId;
////                Long userId_l = (Long) userId;
//                System.out.println("token:"+token);
//                // 查询操作
//                logger.debug("<======method:{} 进入 download 切面 ======>", method.getName());
//                String rk = "user_perms:" + userId;
//                Set set = redis.get(rk, Set.class);
//                if (set.size() == 0)
//                {
//                    logger.debug("<====== Redis 中不存在该记录，从数据库查找 ======>");
//                    List<String> perms = menuMapper.selectPermsByUserId((Long)userId);
//                    Set<String> permsSet = new HashSet<>();
//                    for (String perm : perms)
//                    {
//                        if (StringUtils.isNotEmpty(perm))
//                        {
//                            permsSet.addAll(Arrays.asList(perm.trim().split(",")));
//                        }
//                    }
//                    set = permsSet;
//                    if (set.size() == 0)
//                    {
//                        return "fail!未找到权限";
//                    }
//                    if (pers.expired() > 0)
//                    {
//                        redis.set(rk, set, pers.expired());
//                    }
//                    else
//                    {
//                        redis.set(rk, set);
//                    }
//                }
//                if(set.contains("system:file:down")){
//                    Object obj = point.proceed();
//                    return obj;
//                }
//                return "fail!权限不足";
//            }
//        }
//        catch (Throwable ex)
//        {
//            logger.error("<====== RedisCache 执行异常: {} ======>", ex);
//        }
//        return "fail!无效的token";
//    }
//
//
//}
